import numpy as np
#用局部窗口内的平均值代替单个点的值，使损失函数的图像变平滑
#输入x：[loss1,loss2,loss3……,lossN】，即为每轮迭代的损失函数
def smooth_curve(x):
    window_len = 11#定义滑动窗口长度为11
    #np.r_是 numpy 中用于拼接数组 索引规则是 x[start:end:step],step=-1的时候
    #代表倒着索取；索引-是倒数的意思，所以-1是最后一个元素，-11是倒数第 11个元素
    #这一步是在扩展原始数据，是为了解决边界失真的问题，给x的前后各加一段镜像数据
    #最终s变为左镜像+原始数据+右镜像
    s = np.r_[x[window_len-1:0:-1], x, x[-1:-window_len:-1]]
    w = np.kaiser(window_len, 2)
    y = np.convolve(w/w.sum(), s, mode='valid')
    return y[5:len(y)-5]